上一篇跟上上一篇我們終於分別把兩個環境架設好了
這篇我們就要來介紹如何在背景執行runserver
以及如何使用crontab啦
廢話不多說,咱們累狗~
首先我們一樣先來看我們的aws位址
可以看到現在django是處於關閉狀態
接著我們進入aws的console
然後進入django資料夾,輸入以下指令:
screen -d -m python3 manage.py runserver 0.0.0.0:8000
從十幾天前就跟你講過了,Python很內向的,成功了也不會跟你說的
不過成不成功再輸入一次url就知道了
這次就成功連上線啦
那如果要把這個django殺掉也很簡單
我們先找出執行剛剛command的process
輸入以下指令
ps aux | grep -i manage
就可以看到我們剛剛執行的process id叫51736
所以我們只要砍掉這個process就好了
輸入以下指令
kill -9 51736
指令就成功刪除啦
接下來我們就要來講一下如何讓你的django自動執行function啦
其中django有一個非常好用的套件叫做django-crontab
這個東西下載下來,設定好格式,就會幫你自動執行function了
首先我們先在aws下載django-crontab
pip3 install django-crontab
毫無問題
接下來我們要來修改setting.py內的東西啦
首先先將INSTALLED_APPS的東東加上'django_crontab'
這個套件加上去時,執行manage.py就會自動幫你加上去了
此時你的INSTALLED_APPS應該會像這樣
INSTALLED_APPS = [
'django_crontab',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'stonks_index'
]
接下來是設定CRONJOBS啦
我們先在stonks_index/views.py加上以下程式碼
#測試crontab用
def corn_job():
print("This is cronjob test")
畢竟是測試用的就不要加太多東西啦
然後我們回到settings.py,把這個function加上我們的CRONJOBS排程
由於預設是沒有這個欄位的,所以我們要額外自己加上去
CRONJOBS = [
('45 * * * *', 'stonks_index.views.corn_job'),
]
先來講講第一欄的東東是啥意思
crontab會分成五個部分,分別是分 時 日 月 周
每格可以設定的參數有:*
: 每個段落都會執行a-b
: 每個段落的a時間點開始到b時間點結束的每個單位都會執行a
: 在每個段落的a時間點執行*/n
: 每段落每隔n單位執行a-b/n
: 每個段落的a時間點開始到b時間點結束每格n單位執行
這樣講有點籠統,來幾個實際的範例好了*/30 * * * *
:每個月每天每30分鐘執行30 12 1 */3 *
:每三個月1號的12:30執行0 0 * * 1-5
:每個月每周一到週五的0點0分執行
當然還有一些比較複雜的情況
可以用下面的網址來看一下每個設定的結果如何
https://crontab.guru/
那麼根據這個規則
上面的45 * * * *
就代表著每天每小時在45分時執行
執行的東西就是後面的stonks_index資料夾內views檔案中的corn_job function
以上全部設定完之後,就可以commit上去啦
接著進到aws,把剛剛的code pull下來
然後執行python3 manage.py crontab add
可以看到我們剛剛設定的cronjob就加入到crontab內啦
然後我們可以輸入python3 manage.py crontab show
可以看到有job在crontab內就是成功啦
那要如何確定有cronjob到底有沒有執行成功呢
我們可以去我們的log看
log的位置在 /var/log/syslog這邊
所以我們就打開看看吧
vi /var/log/syslog
(這裡為了截圖方便,所以我把設定改成12分發送)
那如何刪除cronjob呢,也很簡單
輸入指令
python manage.py crontab remove
這樣就把cronjob清空啦
以上就是背景執行跟自動執行cronjob的部分
下一篇我們會進入最後的一篇主菜
我們要來補上我們的index頁面,讓我們進入時不要每次都顯示找不到頁面
想知道django的前端如何製作
且聽下回分解~